package com.achen.direct;

import com.achen.utils.RabbitMQUtils;
import com.rabbitmq.client.Channel;
import com.rabbitmq.client.Connection;
import com.rabbitmq.client.ConnectionFactory;
import com.rabbitmq.client.MessageProperties;
import org.junit.Test;

import java.io.IOException;
import java.util.concurrent.TimeoutException;

/**
 * @author achen
 * @create 2021-07-23 2:51
 */
public class Provider {

    @Test
    public void testProvider() throws IOException, TimeoutException {

//        //创建连接mq的连接工厂对象
//        ConnectionFactory connectionFactory = new ConnectionFactory();
//
//        //创建连接rabbitmq的主机
//        connectionFactory.setHost("1.116.72.198");
//
//        //设置端口号
//        connectionFactory.setPort(5672);
//
//        //设置连接哪个虚拟主机
//        connectionFactory.setVirtualHost("/ems");
//
//        //设置访问虚拟主机的用户名和密码
//        connectionFactory.setUsername("ems");
//        connectionFactory.setPassword("123");
//
//
//        //获取连接对象
//        Connection connection = connectionFactory.newConnection();


        //获取连接对象
        Connection connection = RabbitMQUtils.getConnection();

        //获取连接中的通道
        Channel channel = connection.createChannel();

        //通过通道绑定对应消息队列（给通道声明队列）
        //参数一：队列名称（如果队列不存在自动创建）
        //参数二：用来定义队列特性是否要持久化 true：持久化 false：不持久化
        //参数三：exclusive 是否独占队列 true：独占队列 false：不独占队列
        //参数四：autuDelete 是否在消费完成后自动删除队列 true：自动删除队列 false：不自动删除
        //参数五：额外附加参数
        channel.queueDeclare("helloworld", true, false, false, null);

        //发布消息（注意：同一个通道可以给不同的队列发布消息）
        //参数一：交换机名称
        //参数二：队列名称
        //参数三：传递消息额外设置 (MessageProperties.PERSISTENT_TEXT_PLAIN：重启rabbitmq之后，让队列中的消息持久化)
        //参数四：消息的具体内容
        channel.basicPublish("", "helloworld", MessageProperties.PERSISTENT_TEXT_PLAIN, "hello rabbitmq".getBytes());


//        //关闭通道
//        channel.close();
//
//        //关闭连接
//        connection.close();

        RabbitMQUtils.closeConnectionAndChannel(channel, connection);
    }
}
